// 开启严格模式
'use strict';

// 提示类名
var PROMPT = '.login-form-prompt';
var SHOW = 'down';
// 成功类名
var SUCCESS = 'success';
// 错误类名
var ERROR = 'error';

/**
 * 初始化
 * @return void
 */
(function init() {
    // 变化校验
    changeRules();
    // 提示
    prompt();
})()

/**
 * 提示
 * @return void
 */
function prompt() {
    // 获取地址
    var isLogout = window.location.href.indexOf('logout') !== -1;
    var isLogin= window.location.href.indexOf('not_logged_in') !== -1;

    // 判断是否退出登录
    if (isLogout) message('add', 'success', '退出登录成功');
    // 判断是否未登录
    if (isLogin) message('add', 'warning', '请登录');
}

/**
 * 切换密码
 * @param {Object} _this 当前DOM
 * @return void
 */
function togglePassword(_this) {
    // 获取当前文本款类型
    var type = $(_this).parent().prev().prop('type') === 'password' ? 'text' : 'password';
    // 获取当前标题值
    var title = $(_this).prop('title') === '查看密码' ? '隐藏密码' : '查看密码';

    // 切换类名
    $(_this).toggleClass('fa-eye fa-eye-slash').prop('title', title);

    // 切换类型
    $(_this).parent().prev().prop('type', type);
}

/**
 * 换一张
 * @param {Object} _this 当前DOM
 * @return void
 */
function changeOne(_this) {
    _this.src = _this.src + '?' + Math.random();
}

/**
 * 变化校验
 * @return void
 */
function changeRules() {
    // 登录名
    var name = $('#name');
    var namePattern = /^.{5,18}$/;
    // 密码
    var password = $('#password');
    var passwordPattern = /^.{5,18}$/;
    // 验证码
    var verify = $('#verify');
    var verifyPattern = /^[A-Za-z0-9]{4}$/;

    // 登录名校验
    name.bind('input propertychange blur', function () {
        if ($(this).val() === '') {
            $(this).siblings(PROMPT).text('登录名不能为空').addClass(SHOW);
            $(this).removeClass(SUCCESS).addClass(ERROR);
        } else if (!namePattern.test($(this).val())) {
            $(this).siblings(PROMPT).text('长度在 5 到 18 个字符').addClass(SHOW);
            $(this).removeClass(SUCCESS).addClass(ERROR);
        } else {
            $(this).siblings(PROMPT).removeClass(SHOW);
            $(this).removeClass(ERROR).addClass(SUCCESS);
        }
    })

    // 密码校验
    password.bind('input propertychange blur', function () {
        if ($(this).val() === '') {
            $(this).siblings(PROMPT).text('密码不能为空').addClass(SHOW);
            $(this).removeClass(SUCCESS).addClass(ERROR);
        } else if (!passwordPattern.test($(this).val())) {
            $(this).siblings(PROMPT).text('长度在 5 到 18 个字符').addClass(SHOW);
            $(this).removeClass(SUCCESS).addClass(ERROR);
        } else {
            $(this).siblings(PROMPT).removeClass(SHOW);
            $(this).removeClass(ERROR).addClass(SUCCESS);
        }
    })

    // 验证码校验
    verify.bind('input propertychange blur', function () {
        if ($(this).val() === '') {
            $(this).siblings(PROMPT).text('验证码不能为空').addClass(SHOW);
            $(this).removeClass(SUCCESS).addClass(ERROR);
        } else if (!verifyPattern.test($(this).val())) {
            $(this).siblings(PROMPT).text('长度为 4 个字符').addClass(SHOW);
            $(this).removeClass(SUCCESS).addClass(ERROR);
        } else {
            $(this).siblings(PROMPT).removeClass(SHOW);
            $(this).removeClass(ERROR).addClass(SUCCESS);
        }
    })
}

/**
 * 校验
 * @return void
 */
function rules() {
    // 校验结果
    var result = true;
    // 登录名
    var name = $('#name');
    var namePattern = /^.{5,18}$/;
    // 密码
    var password = $('#password');
    var passwordPattern = /^.{5,18}$/;
    // 验证码
    var verify = $('#verify');
    var verifyPattern = /^[A-Za-z0-9]{4}$/;

    // 登录名校验
    if (name.val() === '') {
        name.siblings(PROMPT).text('登录名不能为空').addClass(SHOW);
        name.addClass(ERROR);
        result = false;
    } else if (!namePattern.test(name.val())) {
        name.siblings(PROMPT).text('长度在 5 到 18 个字符').addClass(SHOW);
        name.addClass(ERROR);
        result = false;
    } else {
        name.addClass(SUCCESS);
    }

    // 密码校验
    if (password.val() === '') {
        password.siblings(PROMPT).text('密码不能为空').addClass(SHOW);
        password.addClass(ERROR);
        result = false;
    } else if (!passwordPattern.test(password.val())) {
        password.siblings(PROMPT).text('长度在 5 到 18 个字符').addClass(SHOW);
        password.addClass(ERROR);
        result = false;
    } else {
        password.addClass(SUCCESS);
    }

    // 验证码校验
    if (verify.val() === '') {
        verify.siblings(PROMPT).text('验证码不能为空').addClass(SHOW);
        verify.addClass(ERROR);
        result = false;
    } else if (!verifyPattern.test(verify.val())) {
        verify.siblings(PROMPT).text('长度在 4 个字符').addClass(SHOW);
        verify.addClass(ERROR);
        result = false;
    } else {
        verify.addClass(SUCCESS);
    }

    // 错误元素
    var error = $('.' + ERROR).eq(0);
    // 获取焦点
    error.focus();
    console.log(error)

    // 返回校验结果
    return result;
}

/**
 * 登录
 * @param {Object} _this 当前DOM
 * @param {String} url 地址
 * @param {String} redirect 重定向
 * @return void
 */
function login(_this, url, redirect) {
    // 校验
    if (rules()) {
        // 添加加载
        actionLoading(_this, 'add', 'submit');

        // 发送请求
        axios.post(url, {
            name: $('#name').val(),
            password: rsaEncrypt($('#password').val()),
            verify: $('#verify').val(),
            remember: $('#remember:checked').val()
        }).then(function (res) {
            // 删除加载
            actionLoading(_this, 'remove', 'submit');
            if (res.data.state === 200) {
                // 重定向
                window.location.href = redirect + '?login';
            } else {
                // 消息提示
                message('add', res.data.type, res.data.message);
                // 清空验证码
                $('#verify').val('');
                $('#verify-img').click();
            }
        }).catch(function (err) {
            // 消息提示
            message('add', 'err', err);
            // 删除加载
            actionLoading(_this, 'remove', 'submit');
        })
    }
}